<?php

defined('BASEPATH') or die('forbidden');
/**
 * url函数脚本库
 * @author  Karson
 * @name    url.php
 * @since   2012-3-6 20:50:27
 */
if (!function_exists('anchor')) {

    /**
     * 链接构造函数
     * @param string $url 链接地址，默认为空
     * @param string $title 链接标题，默认为空
     * @param mixed $attributes 链接扩展属性，默认为空，可选数组或字符串
     * @return string 处理后的链接数据
     */
    function anchor($url = '', $title = '', $attributes = '') {
        $title = (string) $title;
        if (!preg_match('!^\w+://! i', $url))
            $url = substr($url, 0, 1) == '/' ? $url : '/' . $url;
        if ($title == '')
            $title = $url;
        if ($attributes != '')
            $attributes = parse_attr($attributes);
        return '<a href="' . $url . '"' . $attributes . '>' . $title . '</a>';
    }

}

if (!function_exists('anchor_popup')) {

    /**
     * 弹出窗口构造函数
     * @param string $url 链接地址
     * @param string $title 链接标题
     * @param mixed $attributes 链接扩展属性，默认为false，可选bool、string、array
     * @return string 处理后的链接数据
     */
    function anchor_popup($url = '', $title = '', $attributes = FALSE) {
        $title = (string) $title;
        if (!preg_match('!^\w+://! i', $url))
            $url = substr($url, 0, 1) == '/' ? $url : '/' . $url;
        if ($title == '')
            $title = $url;
        if ($attributes === FALSE)
            return "<a href='javascript:void(0);' onclick=\"window.open('" . $url . "', '_blank');\">" . $title . "</a>";
        if (!is_array($attributes))
            $attributes = array();
        foreach (array('width' => '800', 'height' => '600', 'scrollbars' => 'yes', 'status' => 'yes', 'resizable' => 'yes', 'screenx' => '0', 'screeny' => '0',) as $key => $val) {
            $atts[$key] = (!isset($attributes[$key])) ? $val : $attributes[$key];
            unset($attributes[$key]);
        }
        if ($attributes != '')
            $attributes = parse_attr($attributes);
        return "<a href='javascript:void(0);' onclick=\"window.open('" . $url . "', '_blank', '" . parse_attr($atts, TRUE) . "');\"$attributes>" . $title . "</a>";
    }

}

if (!function_exists('mailto')) {

    /**
     * 邮件链接构造函数
     * @param string $email 邮件地址
     * @param string $title 邮件标题
     * @param mixed $attributes 邮件扩展属性
     * @return string 处理后的链接数据
     */
    function mailto($email, $title = '', $attributes = '') {
        $title = (string) $title;
        if ($title == "")
            $title = $email;
        $attributes = parse_attr($attributes);
        return '<a href="mailto:' . $email . '"' . $attributes . '>' . $title . '</a>';
    }

}

if (!function_exists('auto_link')) {

    /**
     * 自动加链接地址数据中的链接地址
     * @param string $str 需要处理的数据
     * @param string $type 自动加链接的类型，默认为both，可选 email、url
     * @param bool $popup 是否在新窗口中打开链接
     * @return string 返回处理后的数据
     */
    function auto_link($str, $type = 'both', $popup = FALSE) {
        if ($type != 'email') {
            if (preg_match_all("#(^|\s|\()((http(s?)://)|(www\.))(\w+[^\s\)\<]+)#i", $str, $matches)) {
                $pop = ($popup == TRUE) ? " target=\"_blank\" " : "";
                for ($i = 0; $i < count($matches['0']); $i++) {
                    $period = '';
                    if (preg_match("|\.$|", $matches['6'][$i])) {
                        $period = '.';
                        $matches['6'][$i] = substr($matches['6'][$i], 0, -1);
                    }
                    $str = str_replace($matches['0'][$i], $matches['1'][$i] . '<a href="http' .
                            $matches['4'][$i] . '://' .
                            $matches['5'][$i] .
                            $matches['6'][$i] . '"' . $pop . '>http' .
                            $matches['4'][$i] . '://' .
                            $matches['5'][$i] .
                            $matches['6'][$i] . '</a>' .
                            $period, $str);
                }
            }
        }

        if ($type != 'url') {
            if (preg_match_all("/([a-zA-Z0-9_\.\-\+]+)@([a-zA-Z0-9\-]+)\.([a-zA-Z0-9\-\.]*)/i", $str, $matches)) {
                for ($i = 0; $i < count($matches['0']); $i++) {
                    $period = '';
                    if (preg_match("|\.$|", $matches['3'][$i])) {
                        $period = '.';
                        $matches['3'][$i] = substr($matches['3'][$i], 0, -1);
                    }
                    $str = str_replace($matches['0'][$i], mailto($matches['1'][$i] . '@' . $matches['2'][$i] . '.' . $matches['3'][$i]) . $period, $str);
                }
            }
        }
        return $str;
    }

}

if (!function_exists('prep_url')) {

    /**
     * 自动给链接加http://
     * @param string $str 需要处理的URL
     * @return string 返回处理后的数据
     */
    function prep_url($str = '') {
        if ($str == 'http://' OR $str == '')
            return '';
        if (substr($str, 0, 7) != 'http://' && substr($str, 0, 8) != 'https://')
            $str = 'http://' . $str;
        return $str;
    }

}

if (!function_exists('redirect')) {

    /**
     * 重定义页面
     * @param string $url 跳转的URL
     * @param string $method 跳转的方法，默认为location,可选refresh
     * @param int $http_response_code 跳转代号，默认为200
     */
    function redirect($url = '', $method = 'location', $http_response_code = 302) {
        if (!preg_match('#^https?://#i', $url))
            $url = site_url($url);
        switch ($method) {
            case 'refresh': header("Refresh:0;url=" . $url);
                break;
            default: header("Location: " . $url, TRUE, $http_response_code);
                break;
        }
        exit;
    }

}

if (!function_exists('parse_attr')) {

    /**
     * 解析属性
     * @param mixed $attributes 属性的值，可选字符串或数组
     * @param bool $javascript 是否为js数据
     * @return string 返回处理后的数据
     */
    function parse_attr($attributes, $javascript = FALSE) {
        if (is_string($attributes))
            return ($attributes != '') ? ' ' . $attributes : '';
        $att = '';
        foreach ($attributes as $key => $val) {
            $att .= ( $javascript == TRUE) ? $key . '=' . $val . ',' : ' ' . $key . '="' . $val . '"';
        }
        if ($javascript == TRUE AND $att != '')
            $att = substr($att, 0, -1);
        return $att;
    }

}